use lexer::lexer_test::TestNextToken;

mod lexer;
mod token;

fn testNextToken1() {
    let input = String::from("=+(){},;");

    let ts: [token::token::Token; 9] = [
        token::token::Token::new(String::from("="), token::token::TokenType::ASSIGN),
        token::token::Token::new(String::from("+"), token::token::TokenType::PLUS),
        token::token::Token::new(String::from("("), token::token::TokenType::LPAREN),
        token::token::Token::new(String::from(")"), token::token::TokenType::RPAREN),
        token::token::Token::new(String::from("{"), token::token::TokenType::LBRACE),
        token::token::Token::new(String::from("}"), token::token::TokenType::RBRACE),
        token::token::Token::new(String::from(","), token::token::TokenType::COMMA),
        token::token::Token::new(String::from(";"), token::token::TokenType::SEMICOLON),
        token::token::Token::new(String::from(""), token::token::TokenType::EOF),
    ];

    TestNextToken(input, &ts);
}

fn testNextToken2() {
    let input = String::from(
        "
        let five = 5;
        let ten = 10;
        ",
    );

    let ts: [token::token::Token; 11] = [
        token::token::Token::new(String::from("let"), token::token::TokenType::LET),
        token::token::Token::new(String::from("five"), token::token::TokenType::IDENT),
        token::token::Token::new(String::from("="), token::token::TokenType::ASSIGN),
        token::token::Token::new(String::from("5"), token::token::TokenType::INT),
        token::token::Token::new(String::from(";"), token::token::TokenType::SEMICOLON),
        token::token::Token::new(String::from("let"), token::token::TokenType::LET),
        token::token::Token::new(String::from("ten"), token::token::TokenType::IDENT),
        token::token::Token::new(String::from("="), token::token::TokenType::ASSIGN),
        token::token::Token::new(String::from("10"), token::token::TokenType::INT),
        token::token::Token::new(String::from(";"), token::token::TokenType::SEMICOLON),
        token::token::Token::new(String::from(""), token::token::TokenType::EOF),
    ];

    TestNextToken(input, &ts);
}

fn main() {
    testNextToken1();
    testNextToken2();
}
